from rest_framework.generics import CreateAPIView, GenericAPIView
from rest_framework import mixins
from erp_system.models import UserModel
from rest_framework.viewsets import GenericViewSet

from PAA_ERP.apps.erp_system.serializer.user_serializer import UserRegisterSerializer, UserUpdateOrDeleteSerializer, \
    UserGetSerializer, ResetPasswordSerializer
from PAA_ERP.utils.base_views import MultipleDestroyMixin
from PAA_ERP.utils.pagination import GlobalPagination


class RegiaterView(CreateAPIView):
    '''

    create:
    注册用户

    参数：为username,password必传,phone,real_name, return：添加之后的user对象
    '''
    queryset = UserModel.objects.all()
    serializer_class = UserRegisterSerializer


# 当前视图类，除了用户注册和密码修改之外，其他所有用户管理操作
class UserView(mixins.UpdateModelMixin,
               mixins.RetrieveModelMixin,
               mixins.DestroyModelMixin,
               mixins.ListModelMixin,
               MultipleDestroyMixin,
               GenericViewSet):
    '''
    destroy:
    用户--删除

    用户删除，status:204（成功），return：None

    multiple_delete:
    用户批量删除，

    用户批量删除，status:204（成功），return：None

    partial_update:
    用户-修改，只是修改用户的角色户用近乎所在的部门，还包括用户的手机号码和真实姓名

    角色修改，status:200（成功），return：None

    update:
    用户-修改，只是修改用户的角色户用近乎所在的部门，还包括用户的手机号码和真实姓名

    角色修改，status:200（成功），return：None

    retrieve:
    查询某一个用户

    list:
    查询用户列表

    '''
    queryset = UserModel.objects.all()
    pagination_class = GlobalPagination

    def get_serializer_class(self):
        if self.action == 'partial_update' or self.action == 'update' or self.action == 'destroy':
            return UserUpdateOrDeleteSerializer
        else:
            return UserGetSerializer


class ResePasswordView(mixins.UpdateModelMixin, GenericViewSet):
    '''
    patch:
    用户--重置密码，需要输入原始密码新密码和新密码的确认

    用户重置密码，status：（200）成功，return：修改之后的用户，但不显示密码
    '''

    queryset = UserModel.objects.all()
    serializer_class = ResetPasswordSerializer

    def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)
